package com.yipao.db.dao.order;

import com.yipao.db.domain.order.vo.OrderAnalysisVo;
import com.yipao.db.domain.order.vo.OrderStatisticsScale;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Set;

/**
 * 订单统计
 *
 * @author tianhao
 * @date 2020/5/2 17:30
 **/
public interface OrderStatisticsMapper {

    /**
     * 统计指定日期,订单商品数量
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param payStatus 支付状态
     * @return
     */
    int querySumOrderGoodsNumberByTime(@Param("startTime") String startTime,
                                       @Param("endTime") String endTime,
                                       @Param("payStatus") Integer payStatus);

    /**
     * 统计指定日期,订单的销售金额
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param payStatus 支付状态
     * @return
     */
    BigDecimal querySumOrderSaleAmountByTime(@Param("startTime") String startTime,
                                             @Param("endTime") String endTime,
                                             @Param("payStatus") Integer payStatus);

    /**
     * 统计指定日期,订单商品数量占比
     *
     * @param totalNumber 商品总数量,计算占比
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param payStatus   支付状态
     * @return
     */
    List<OrderStatisticsScale> queryOrderGoodsNumberScaleByTime(@Param("totalNumber") Integer totalNumber,
                                                                @Param("startTime") String startTime,
                                                                @Param("endTime") String endTime,
                                                                @Param("payStatus") Integer payStatus);

    /**
     * 统计指定日期,订单的销售金额占比
     *
     * @param totalSaleAmount 总销售额,计算占比
     * @param startTime       开始时间
     * @param endTime         结束时间
     * @param payStatus       支付状态
     * @return
     */
    List<OrderStatisticsScale> queryOrderSaleAmountScaleByTime(@Param("totalSaleAmount") BigDecimal totalSaleAmount,
                                                               @Param("startTime") String startTime,
                                                               @Param("endTime") String endTime,
                                                               @Param("payStatus") Integer payStatus);

    /**
     * 销售排行,前10
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param payStatus 支付状态
     * @return
     */
    List<String> querySaleNumberTop10(@Param("startTime") String startTime,
                                      @Param("endTime") String endTime,
                                      @Param("payStatus") Integer payStatus);


    /**
     * 年度的销售额,按年分组
     *
     * @param yearList
     * @return
     */
    List<OrderAnalysisVo> selectYearSaleNum(@Param("yearList") List<String> yearList);

    /**
     * 月度的销售额,按月分组
     *
     * @param monthList
     * @param payStatus 支付状态
     * @return
     */
    List<OrderAnalysisVo> selectMonthSaleNum(@Param("monthList") List<String> monthList,
                                             @Param("payStatus") Integer payStatus);

}
